2021-11-16
cpue_logcpue_log# Da evtl. zeitliche und räumliche # Abhängigkeit gegeben ist, ist # dieser Test geeigneter: y <- dat$cpue_log ks.test(y, "pnorm", mean = mean(y), sd = sd(y))
One-sample Kolmogorov-Smirnov test
data: y
D = 0.052766, p-value = 0.6398
alternative hypothesis: two-sidedmod <- lm(cpue_log ~ long, dat)
\(\Rightarrow\) Vor der Betrachtung des numerischen Outputs kommt aber die Modellvalidierung!
y <- residuals(mod) ks.test(y, "pnorm", mean = mean(y), sd = sd(y))
One-sample Kolmogorov-Smirnov test
data: y
D = 0.058788, p-value = 0.5006
alternative hypothesis: two-sidedsummary(mod)
Call:
lm(formula = cpue_log ~ long, data = dat)
Residuals:
Min 1Q Median 3Q Max
-4.4206 -0.7396 -0.0511 0.9667 3.0094
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 9.48228 0.52837 17.95 <2e-16 ***
long -0.38599 0.03582 -10.78 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 1.262 on 196 degrees of freedom
Multiple R-squared: 0.3721, Adjusted R-squared: 0.3689
F-statistic: 116.1 on 1 and 196 DF, p-value: < 2.2e-16Die H1 kann bestätigt werden. Die lineare Regressionsanalyse zeigt, dass es einen signifikanten, negativen Einfluss des Längengrads auf den logarithmierten CPUE der Scholle gibt (p < 0.001). Mit jedem Grad Richtung Osten, nimmt der logarithmierte CPUE um 0.386 Einheiten ab:
\[ln(CPUE) = 9.48 -0.386 * Längengrad\]
Ingesamt lässt sich 37% der CPUE Variabilität über den Längengrad erklären.
dat %>% group_by(area) %>% count()
# A tibble: 7 × 2 # Groups: area [7] area n <int> <int> 1 21 17 2 22 29 3 23 3 4 24 50 5 25 81 6 26 16 7 28 2
dats <- dat %>% filter(area %in% c(21,22,24,25,26)) dats$area <- factor(dats$area)
cpue_log IN JEDER GRUPPE!cpue_log ZWISCHEN DEN GRUPPEN!cpue_logDa evtl. eine Abhängigkeit zwischen den Daten existiert, ist der Kolmogorov-Smirnoff-Test besser. Bei kleinem N (wie hier) wäre aber Shapiro-Wilk Test besser:
y <- dats$cpue_log[dats$area == "21"] ks.test(y, "pnorm", mean = mean(y), sd = sd(y))
One-sample Kolmogorov-Smirnov test
data: y
D = 0.13831, p-value = 0.901
alternative hypothesis: two-sided
shapiro.test(y)
Shapiro-Wilk normality test
data: y
W = 0.95358, p-value = 0.5156cpue_logcar::leveneTest(y = dats$cpue_log, group = dats$area)
Levene's Test for Homogeneity of Variance (center = median)
Df F value Pr(>F)
group 4 1.4042 0.2342
188 mod <- aov(cpue_log ~ area, dats)
\(\Rightarrow\) Vor der Betrachtung des numerischen Outputs kommt aber die Modellvalidierung!
summary(mod)
Df Sum Sq Mean Sq F value Pr(>F) area 4 160.7 40.18 24.32 3.14e-16 *** Residuals 188 310.6 1.65 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
TukeyHSD(mod)
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = cpue_log ~ area, data = dats)
$area
diff lwr upr p adj
22-21 -0.007549236 -1.089087 1.0739889 1.0000000
24-21 -0.519785941 -1.513850 0.4742780 0.6024862
25-21 -1.371264612 -2.315831 -0.4266983 0.0008614
26-21 -3.404010057 -4.637282 -2.1707380 0.0000000
24-22 -0.512236705 -1.338685 0.3142120 0.4320102
25-22 -1.363715376 -2.129914 -0.5975170 0.0000200
26-22 -3.396460821 -4.499101 -2.2938211 0.0000000
25-24 -0.851478671 -1.488266 -0.2146912 0.0027570
26-24 -2.884224116 -3.901206 -1.8672419 0.0000000
26-25 -2.032745445 -3.001402 -1.0640891 0.0000003Die H0 kann abgelehnt werden, es gibt einen signifikanten Unterschied zwischen den Gruppen (1-faktorielle ANOVA: \(F_{4, 188} = 24.32\), p < 0.0001).
Der Tukey’s HSD Test zeigt, dass sich hauptsächlich SD25 und 26 von den anderen 3 signifikant unterscheiden. Hier ist der logarithmierte CPUE im Durchschnitt geringer, insbesondere in SD26 (s. Abb. links).
siehe Aufgabe 1
cpue_logmod <- lm(cpue_log ~ depth + temp + sal, dat) car::vif(mod)
depth temp sal 1.591708 1.257096 1.576777
mod <- lm(cpue_log ~ depth + temp + sal, dat)
step()step(mod)
Start: AIC=123.17
cpue_log ~ depth + temp + sal
Df Sum of Sq RSS AIC
- depth 1 0.036 354.26 121.19
<none> 354.22 123.17
- temp 1 32.204 386.42 138.40
- sal 1 50.280 404.50 147.45
Step: AIC=121.19
cpue_log ~ temp + sal
Df Sum of Sq RSS AIC
<none> 354.26 121.19
- temp 1 39.639 393.90 140.19
- sal 1 73.227 427.48 156.39
Call: lm(formula = cpue_log ~ temp + sal, data = dat) Coefficients: (Intercept) temp sal -4.16317 1.68793 0.08493
fin_mod <- lm(cpue_log ~ temp + sal, dat)
summary(fin_mod)
Call:
lm(formula = cpue_log ~ temp + sal, data = dat)
Residuals:
Min 1Q Median 3Q Max
-3.6267 -0.8119 0.0496 0.9677 4.0506
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -4.16317 1.40369 -2.966 0.0034 **
temp 1.68793 0.36135 4.671 5.57e-06 ***
sal 0.08493 0.01338 6.349 1.49e-09 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 1.348 on 195 degrees of freedom
Multiple R-squared: 0.2875, Adjusted R-squared: 0.2802
F-statistic: 39.34 on 2 and 195 DF, p-value: 4.433e-15\[ln(CPUE) = -4.16 + 1.688 * Temperatur + 0.085 * Salinität\]
Das finale Regressionsmodell zeigt, dass der logarithmierte CPUE linear mit einer Zunahme der Temperatur und Salinität steigt (jeweils p < 0.0001). Allerdings kann das Modell nur 28% der Gesamtvariabilität des Fangs erklären, ein großer Teil der räumlichem Variabiltät muss daher durch andere Umweltbedingungen zu erklären sein.
predict(model) Funktion die Regressionslinie eingezeichnet werden.geom_smooth() Funktion ist nicht geeignet, da sich diese immer auf eine einfache Regression bezieht!library(modelr)
df_temp <- data_grid(data = dat,
temp = seq_range(temp, 20),
sal = mean(sal) # keep constant
)
pred_temp <- predict(fin_mod, newdata = df_temp,
se.fit = TRUE)
df_temp$pred <- pred_temp$fit
df_temp$ci_low <- pred_temp$fit - pred_temp$se.fit
df_temp$ci_up <- pred_temp$fit + pred_temp$se.fit
ggplot(dat, aes(x = temp)) +
geom_point(aes(y = cpue_log)) +
# add regression line
geom_line(data = df_temp, aes(y = pred),
col = "blue") +
# add confidence intervals
geom_ribbon(data = df_temp, aes(
ymin = ci_low, ymax = ci_up),
fill = "grey50", alpha = 0.2) df_sal <- data_grid(data = dat,
temp = mean(temp), # keep constant
sal = seq_range(sal, 20)
)
pred_sal <- predict(fin_mod, newdata = df_sal,
se.fit = TRUE)
df_sal$pred <- pred_sal$fit
df_sal$ci_low <- pred_sal$fit - pred_sal$se.fit
df_sal$ci_up <- pred_sal$fit + pred_sal$se.fit
ggplot(dat, aes(x = sal)) +
geom_point(aes(y = cpue_log)) +
# add regression line
geom_line(data = df_sal, aes(y = pred),
col = "blue") +
# add confidence intervals
geom_ribbon(data = df_sal, aes(
ymin = ci_low, ymax = ci_up),
fill = "grey50", alpha = 0.2)